home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / gnustuff / tos / progut~1 / stdwin.zoo / bed / fmenu.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-10-19  |  2.8 KB  |  177 lines

  1. #include <stdio.h>
  2. #include "bed.h"
  3. #include "menu.h"
  4.  
  5. extern char    *strip () ;
  6.  
  7. extern int    sqrsize ;
  8.  
  9. extern int    map_width ;
  10. extern int    map_height ;
  11.  
  12. extern char    *fname ;
  13. extern char    *title ;
  14.  
  15. extern WINDOW    *win ;
  16.  
  17. extern char    *raster ;
  18.  
  19. extern bool    changed ;
  20.  
  21. void
  22. do_open_file ()
  23. {
  24.     if (changed) {
  25.         switch (waskync ("Save changes ?", 1)) {
  26.         case 1:
  27.             if (!writebitmap ())
  28.                 return ;
  29.             break ;
  30.         case -1 :
  31.             return ;
  32.         }
  33.  
  34.         changed = FALSE ;
  35.     }
  36.     if (fname != NULL) {
  37.         free (fname) ;
  38.         fname = title = NULL ;
  39.     }
  40.  
  41.     if (!readbitmap ()) {
  42.         if (fname != NULL) {
  43.             free (fname) ;
  44.             fname = title = NULL ;
  45.             wsettitle (win, "Untitled") ;
  46.         }
  47.  
  48.         newraster () ;
  49.     }
  50. }
  51.  
  52. void
  53. do_new_map ()
  54. {
  55.     char    str[20] ;
  56.  
  57.     if (changed) {
  58.         switch (waskync ("Save changes ?", 1)) {
  59.         case 1 :
  60.             if (!writebitmap ())
  61.                 return ;
  62.             break ;
  63.         case -1 :
  64.             return ;
  65.         }
  66.  
  67.         changed = FALSE ;
  68.     }
  69.  
  70.     if (fname != NULL) {
  71.         free (fname) ;
  72.         fname = title = NULL ;
  73.         wsettitle (win, "Untitled") ;
  74.     }
  75.  
  76.     *str = 0 ;
  77.  
  78.     if (waskstr ("Enter width of new raster", str, 20)) {
  79.         while ((map_width = atoi (str)) <= 0) {
  80.             *str = 0 ;
  81.             if (!waskstr ("Please enter a number greater 0",
  82.                                 str, 20)) {
  83.                 map_width = -1 ;
  84.                 break ;
  85.             }
  86.         }
  87.  
  88.         if (waskstr ("Enter height of new raster", str, 20)) {
  89.             while ((map_height = atoi (str)) <= 0) {
  90.                 *str = 0 ;
  91.                 if (!waskstr ("Please enter a number greater 0",
  92.                                 str, 20))
  93.                     break ;
  94.             }
  95.         }
  96.         else
  97.             map_width = -1 ;
  98.     }
  99.  
  100.     if (map_width == -1) {
  101.         map_width = DEF_COLS ;
  102.         map_height = DEF_ROWS ;
  103.     }
  104.  
  105.     newraster () ;
  106. }
  107.  
  108. bool
  109. do_quit ()
  110. {
  111.     if (changed) {
  112.         switch (waskync ("Save changes ?", 1)) {
  113.         case 1 :
  114.             if (!writebitmap ())
  115.                 return (FALSE) ;
  116.             break ;
  117.         case -1 :
  118.             return (FALSE) ;
  119.         }
  120.  
  121.         changed = FALSE ;
  122.     }
  123.     wclose (win) ;
  124.     free (raster) ;
  125.     raster = NULL ;
  126.     return (TRUE) ;
  127. }
  128.  
  129. bool
  130. do_file_menu (ep)
  131.     EVENT    *ep ;
  132. {
  133.     switch (ep->u.m.item) {
  134.     case OPEN_ITEM:
  135.         do_open_file () ;
  136.         setsqrsize () ;
  137.         wchange (win, 0, 0, map_width * sqrsize,
  138.                         map_height * sqrsize) ;
  139.         wsetdocsize (win, map_width * sqrsize, map_height * sqrsize) ;
  140.         break ;
  141.     case NEW_ITEM:
  142.         do_new_map () ;
  143.         setsqrsize () ;
  144.         wchange (win, 0, 0, map_width * sqrsize,
  145.                         map_height * sqrsize) ;
  146.         wsetdocsize (win, map_width * sqrsize, map_height * sqrsize) ;
  147.         break ;
  148.     case SAVE_ITEM:
  149.         if (changed) {
  150.             if (writebitmap ())
  151.                 changed = FALSE ;
  152.         }
  153.         break ;
  154.     case SAVE_AS_ITEM: {
  155.         char    namebuf[256] ;
  156.  
  157.         strcpy (namebuf, fname) ;
  158. /*        if (waskstr ("Save as ?", namebuf, 256, FALSE)) { */
  159.         if (waskstr ("Save as ?", namebuf, 256)) {
  160.             char    *savedname = fname ;
  161.  
  162.             fname = strdup (namebuf) ;
  163.             title = strip (fname) ;
  164.             (void) writebitmap () ;
  165.             free (fname) ;
  166.             fname = savedname ;
  167.             title = strip (fname) ;
  168.         }
  169.         break ;
  170.         }
  171.     case QUIT_ITEM:
  172.         return (do_quit ()) ;
  173.     }
  174.  
  175.     return (FALSE) ;
  176. }
  177.